// 导入api
import { login,logout,getUserInfo } from '@/api/login';
// 导入 Cookie 工具类
import { setCookie, getCookie, removeCookie } from '@/utils/Cookie';
// 导入 router
import { resetRouter } from '@/router';

// 创建登录相关的状态管理
export default {
    // 状态,理解为变量
    state: {
        token: getCookie(), // 后端返回的token信息
        avatar: '', // 用户头像
        username: '' // 用户信息
    },
    // 类似于计算属性
    getters: {
    },
    // 操作状态state的方法
    mutations: {
        SET_TOKEN(state, token) {
            state.token = token;
        },
        SET_USERNAME(state, username) {
            state.username = username;
        },
        SET_AVATAR(state, avatar) {
            state.avatar = avatar;
        },
        RESET_STATE(state) {
            state.token = getCookie();
            state.avatar = '';
            state.username = '';
        }
    },
    // 操作mutations的方法
    actions: {
        // 提交登录信息
        login({ commit }, data) {
            /** 登录,保存token到浏览器和store里面 */
            return new Promise((resolve, reject) => {
                login(data).then(response => {
                    commit('SET_TOKEN', response.data);
                    setCookie(response.data);
                    resolve();
                }).catch(error => {
                    reject(error)
                })
            });
        },
        // 用户注销
        logout({ commit, state }) {
            return new Promise((resolve, reject) => {
                /** 注销,清除本地token和重置state状态 */
                logout(state.token).then(() => {
                    removeCookie(); // 清除token
                    commit('RESET_STATE'); // 重置store状态
                    resetRouter(); // 重置当前路由
                    resolve();
                }).catch(error => {
                    reject(error)
                });
            });
        },
        // 获取用户信息:名称,头像
        getUserInfo({ commit, state }) {
            /** 根据token获取用户信息 */
            return new Promise((resolve, reject) => {
                getUserInfo(state.token).then(response => {
                    commit('SET_AVATAR', response.data.avatar);
                    commit('SET_USERNAME', response.data.username);
                    resolve(response);
                }).catch(error => {
                    reject(error)
                });
            });
        },
        // 清除token
        resetToken({ commit }) {
            /** 清除token */
            return new Promise((resolve) => {
                removeCookie(); // 清除token
                commit('RESET_STATE'); // 重置state状态
                resolve();
            });
        }
    }
}